package org.ailuoli.guard.domain.enums;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * <p>
 * 状态枚举
 * </p>
 *
 * @author sander 2024/02/13
 */
@Getter
@RequiredArgsConstructor
public enum StatusEnum {

    /**
     * 异常(未知状态)
     */
    ERROR(-1),

    /**
     * 正常
     */
    NORMAL(0),

    /**
     * 密码过期(强制要求用户修改密码，未修改密码不可登录)
     */
    PASSWORD_EXPIRED(2),

    /**
     * 密码错误次数过多(帐号数据存在异常，强制要求用户修改密码，未修改密码不可登录)
     */
    PASSWORD_ERROR(3),

    /**
     * 密码泄漏
     */
    PASSWORD_LEAK(4),

    /**
     * 密码弱(密码强度不符合要求，强制要求用户修改密码，未修改密码不可登录)
     */
    PASSWORD_WEAK(5),

    /**
     * 数据迁移中
     */
    MIGRATING(10),

    /**
     * 维护(帐号数据存在异常，修复中)
     */
    MAINTENANCE(11),

    /**
     * 禁用
     */
    DISABLE(12),

    /**
     * 待注销(用户申请注销帐号，帐号数据保留，可登录)
     */
    PENDING_CANCEL(13),

    /**
     * 注销中(后台进行帐号注销，帐号数据保留，不可登录，退出所有登录状态)
     */
    CANCELING(14),

    /**
     * 注销(后台完成帐号注销，帐号数据保留，不可登录)
     */
    CANCEL(15),

    /**
     * 封号(用户存在严重违规行为，强制退出所有登录状态，帐号数据保留，不可登录)
     */
    BAN(99);

    private final int value;

    public boolean equals(Integer value) {
        return value != null && this.value == value;
    }

    public boolean equals(StatusEnum statusEnum) {
        return statusEnum != null && this.value == statusEnum.value;
    }

    public boolean equals(String status) {
        return this.name().equalsIgnoreCase(status);
    }

    public static StatusEnum of(String status) {
        for (StatusEnum statusEnum : StatusEnum.values()) {
            if (statusEnum.name().equalsIgnoreCase(status)) {
                return statusEnum;
            }
        }
        return ERROR;
    }

    public int value() {
        return value;
    }

}
